Coroutining Folds with Hyperfunctions